package com.itump.base.web.action;



import java.util.Map;



import org.apache.struts2.ServletActionContext;



import com.opensymphony.xwork2.Preparable;



/**

 * Struts2中典型CRUD Action的抽象基类.

 * 

 * 主要定义了对Preparable,ModelDriven接口的使用,以及CRUD函数和返回值的命名.

 *

 * @param <T> CRUDAction所管理的对象类型.

 * 

 */

@SuppressWarnings("serial")

public abstract class CrudActionSupport<T> extends BaseAction implements Preparable {



	/**

	 * 进行增删改操作后,以redirect方式重新打开action默认页的result名.

	 */

	public static final String RELOAD = "reload";

	
	public static final String PREFIX = "/web-inf/jsp/";
	
	private Map<?, ?> params = ServletActionContext.getRequest().getParameterMap();







	/**

	 * Action函数,默认action函数，默认指向list函数.

	 */

	@Override

	public String execute() throws Exception {

		return list();

	}



	// CRUD函数 //



	/**

	 * Action函数,显示Entity列表.

	 * 建议return SUCCESS.

	 */

	public abstract String list() throws Exception;



	/**

	 * Action函数,新增或修改Entity. 

	 * 建议return RELOAD.

	 */

	public abstract String save() throws Exception;



	/**

	 * Action函数,删除Entity.

	 * 建议return RELOAD.

	 */

	public abstract String delete() throws Exception;



	// Preparable函数 //



	/**

	 * 实现空的prepare()函数,屏蔽所有Action函数公共的二次绑定.

	 */

	public void prepare() throws Exception {

	}



	/**

	 * 在save()前执行二次绑定.

	 */

	public void prepareSave() throws Exception {

		prepareModel();

	}



	/**

	 * 在input()前执行二次绑定.

	 */

	public void prepareInput() throws Exception {

		prepareModel();

	}



	/**

	 * 等同于prepare()的内部函数,供prepardMethodName()函数调用. 

	 */

	protected abstract void prepareModel() throws Exception;

	

	

	public Map<?, ?> getParams() {

		return params;

	}



}

